package docmanager.operation.documentos;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bf.operation.Operation;
import bf.operation.OperationException;
import docmanager.db.ConfigData;
import docmanager.db.ConnectionPool;

public class OpConsultarDocumento3 extends Operation {

	@Override
	public Map execute(HttpServletRequest request) throws OperationException {
		Map<String, Object> m = new HashMap<String, Object>();
		int id = Integer.parseInt(request.getParameter("id_doc"));
		FileOutputStream fos = null;
		try {
			Connection conn = ConnectionPool.getConnection();
			
			String query = "SELECT contenido, nombreArchivo FROM documentos WHERE id = '" + id + "'";
			Statement s = conn.createStatement ();
	        ResultSet rs = s.executeQuery (query);
//	        Blob blob = rs.getBlob("contenido");
//	        byte[] documentData = blob.getBytes((long)0, (int)blob.length());
	        if (rs.first()) {
//	    		byte[] documentData = rs.getBytes("contenido");
				String nombreArchivo = rs.getString("nombreArchivo");
	        	
	        	String path = ConfigData.getInstance().getTempPath();
		        byte[] documentData = rs.getBytes("contenido");

/*		        
		        File archivoTemporal = new File(path + "tmp" + nombreArchivo);
		        fos = new FileOutputStream(archivoTemporal);
		        fos.write(documentData);
		        m.put("archivoTemporal", archivoTemporal);
*/
				m.put("contenido", documentData);
				m.put("nombreArchivo", nombreArchivo);
			//	m.put("size", new Integer(documentData.length));
				
				
			     ServletOutputStream myOut=null;
			     HttpServletResponse response = this.getResponse();
				 myOut = response.getOutputStream();
				 response.setContentType("application/octet-stream");
			     response.addHeader( "Content-Disposition","attachment; filename=\""+nombreArchivo + "\"" );
			     myOut.write(documentData);
				
	        }
			
			ConnectionPool.closeConn(conn);
		} catch (Exception e) {
			e.printStackTrace();
			throw new OperationException();
		}
/*
		catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new OperationException();
		}
		
		catch (IOException e) {
			e.printStackTrace();
			throw new OperationException();
		}
		*/

		return m;
	}

	@Override
	public String getReturnURL() {
		//return "Documentos/DownloadDocumentos.jsp";
		return null;
	}

}
